<?php

/**
 * \file
 * Classe `area`.
 */
 
namespace pilar\Blocks /* \cond */ ; /* \endcond */
{

/**
 * Zone de diffusion sur les blocs.
 *
 * \since 10/09/2008
 * \author Matthieu OVIEDO <matthieu.oviedo@gmail.com>
 */
class Area extends \object {

/**
 * Blocs inscrits dans la zone de diffusion.
 * \since 10/09/2008
 */
public $subBlocks;


/**
 * Bloc hôte de la zone de diffusion.
 * \since 10/09/2008
 */
public $parentBlock;


protected function loadDefaultParams() {
 parent::loadDefaultParams();

 $this->params->define(array(
  'name' => ''                // Nom de la zone de diffusion.
 ));
}


protected function initialize() {
 parent::initialize();

 $this->subBlocks = array();
}


/**
 * Ajoute un ou plusieurs blocs à la zone de diffusion.
 * \param $ Blocs à ajouter.
 */
public function pushSubBlocks() {
 foreach(func_get_args() as $block) {
  if (is_array($block)) {
  	foreach ($block as $b) {
    $this->subBlocks[] = $b;
  	}
  } else {
   $this->subBlocks[] = $block;
  }
 }
}


/**
 * Contenu de la zone.
 *
 * \param $domDoc \DOMDocument parent.
 * \return DOMNode de la zone de diffusion.
 *
 * \since 10/09/2008
 */
public function domNode(\DOMDocument $domDoc) {
 $domArea = $domDoc->createElement($this->get('name'));

 $domArea->appendChild(
  $domDoc->createProcessingInstruction(
   'php',
   '$this->area(\''.$this->get('name').'\')->buildContent()'
  )
 );

 return $domArea;
}


/**
 * Génère et écrit sur la sortie standard le contenu de la zone de diffusion.
 * \since 10/09/2008
 */
public function buildContent() {
 foreach($this->subBlocks as $block) {
  $block->display();
 }
}


/**
 * S'occupe de faire exécuter les actions de tous les sous-blocs.
 */
public function doActions() {
 foreach($this->subBlocks as $block) {
  $block->doActions();
 }
}

} // Class.

} // Namespace.

?>
